package com.controller;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@WebServlet("/upload")
public class BookAddContraler extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		try {
			// 1. 创建工厂对象
			FileItemFactory factory = new DiskFileItemFactory();
			// 2. 文件上传核心工具类
			ServletFileUpload upload = new ServletFileUpload(factory);
			// 设置大小限制参数
			upload.setFileSizeMax(10*1024*1024);// 单个文件大小限制，此处为10M
			upload.setSizeMax(500*1024*1024);	// 总文件大小限制，此处为500M
			upload.setHeaderEncoding("UTF-8");	// 对中文文件编码处理
			// 3. 把请求数据转换为list集合
			List<FileItem> list = upload.parseRequest(request);
			// 遍历
			for(FileItem item : list){
				// 判断：普通文本数据
				if (item.isFormField()){
					// 获取名称
					String name = item.getFieldName();
					// 获取值
					String value = item.getString();
					//转换为UTF-8编码
					value = new String(value.getBytes("ISO8859-1"),"UTF-8");
					System.out.println(name+"，"+value);
				} 
				// 文件表单项
				else {
					/******** 文件上传 ***********/
					// a. 获取文件名称
					String name = item.getName();
					// ----处理上传文件名重名问题----
					// a1. 先得到唯一标记(生成的唯一字符串，避免跟服务器上面已经存在的文件同名)
					String id = UUID.randomUUID().toString();
					// a2. 拼接文件名
					name = id + "#" + name;	
					// b. 得到上传目录
					String basePath=getServletContext().getRealPath("/file");
					// c. 创建要上传的文件对象
					File file = new File(basePath,name);
					// d. 上传
					item.write(file);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		//跳转
		
	}
}
